package sucre
import java.text.SimpleDateFormat

class DocumentosController {
    def loginService
    def beforeInterceptor = [action:this.&auth]
    def auth = {
        def result =loginService.validarAcceso(
            session["seguridad_usuario"],
            session["seguridad_funcionesHabilitadas"],
            controllerName,actionName,request.getRemoteAddr().toString())
        if(!result) {
            redirect(controller:"login",action:"auth",params:['acceso':false])
            return false
        }
    }
    
    def parametersService
    
    def redirectEstudio = {}
    def redirectConducta = {}
    def redirectNoBecado ={}
    def redirectTrabajoDocente={}
    def redirectTrabajoOperario={}
    
    def estudio = {
        consultarAlumno.call("estudio")
        
    }
    def noBecado = {
        consultarAlumno.call("noBecado")
    }
    
    def trabajoDocente = {
        params.max = parametersService.getInt("paginacion.maxRegPagina")
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        
        def query={
            if(params.searchField){
                ilike('nombres','%'+params.searchField+'%')
            }
        }
        def docenteList = Docente.createCriteria().list(params,query)
        [ docenteInstanceList:  docenteList,
            docenteInstanceTotal: docenteList.getTotalCount()]
        
    }
    def trabajoOperario = {
        params.max = parametersService.getInt("paginacion.maxRegPagina")
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        
        def query={
            if(params.searchField){
                ilike('nombres','%'+params.searchField+'%')
            }
        }
        def operarioList = Operario.createCriteria().list(params,query)
        [ operarioInstanceList:  operarioList,
            operarioInstanceTotal: operarioList.getTotalCount()]
    }
    
    
    def reportAlumno = {
        def data = new ArrayList();                
        SimpleDateFormat formatoDia = new SimpleDateFormat("dd")
        SimpleDateFormat formatoMes = new SimpleDateFormat("MM")
        SimpleDateFormat formatoAnio = new SimpleDateFormat("yyyy")
        
        String stringDia  = formatoDia.format(new Date())
        String stringMes  = formatoMes.format(new Date())
        String stringAnio = formatoAnio.format(new Date())
        
        String dia  = message(code:'reporte.dia.' + stringDia) + " ("+stringDia+")"
        String mes  = message(code:'reporte.mes.' + stringMes)
        String anio =  message(code:'reporte.anio.' + stringAnio) + "("+stringAnio+")"
        def aldea = Aldea.list().get(0)
        params.direccion = aldea.nombre + ". " + aldea.direccion + "."
        params.aldea = aldea.nombre
        params.dia = dia
        params.mes = mes
        params.anio = anio
        params._format="PDF"
        params._name="constanciaDeEstudio"
        params._file="constanciaEstudio"
        params.imgSucre = servletContext.getRealPath("/images/sucre.png")
        params.ubv = servletContext.getRealPath("/images/ubv.png")
        def alumno = Alumno.findByCedula(params.cedula)
        params.especialidad = alumno.especialidad.nombre
        //-----------------busco lapso academico para obtener
        // las materias que cursa y luego la division-------------------
        def lapso = sucre.LapsoAcademico.createCriteria()
        def results = lapso.list (max: 1, offset: 0) {
            order("id", "desc")
        }
        def lapsoA =""
        if (!results.isEmpty()){
            lapsoA = results.get(0).nombre
        }
        def inscripcion = sucre.Inscripcion.createCriteria()
        def inscripciones = inscripcion.list (max: 1, offset: 0) {
            eq("lapsoAcademico",lapsoA)
            eq("alumno", alumno)
            order("id", "desc")
        }
        if (inscripciones.size()==0){
            params._format="PDF"
            params._name="noInscrito"
            params._file="noInscrito"
            params.mensaje = "El Triunfador " + alumno.nombres + " "
            params.mensaje += alumno.apellidos + " con cédula de identidad N° "
            params.mensaje += alumno.cedula + " no ha realizado inscripción en el lapso académico en curso "
            params.mensaje += lapsoA + ", en la " + aldea.nombre + ".";
            chain(controller:'jasper',action:'index',params:params)
        } else {
            params.division = inscripciones.get(0).division.nombre.replace("-", " en ")
        }
        params.division = inscripciones.get(0).division.nombre.replace("-", " en ")
        //-------------Busco datos de Coordinador-----------------------
        def coordinador = Coordinador.findByEstado(true)
        params.coordinador = coordinador.nombres + " " + coordinador.apellidos
        data.add(alumno)
        chain(controller:'jasper',action:'index',model:[data:data],params:params)
    }
    
    def reporteNoBecado = {
        def data = new ArrayList();                
        SimpleDateFormat formatoDia = new SimpleDateFormat("dd")
        SimpleDateFormat formatoMes = new SimpleDateFormat("MM")
        SimpleDateFormat formatoAnio = new SimpleDateFormat("yyyy")
        
        String stringDia  = formatoDia.format(new Date())
        String stringMes  = formatoMes.format(new Date())
        String stringAnio = formatoAnio.format(new Date())
        
        String dia  = message(code:'reporte.dia.' + stringDia) + " ("+stringDia+")"
        String mes  = message(code:'reporte.mes.' + stringMes)
        String anio =  message(code:'reporte.anio.' + stringAnio) + "("+stringAnio+")"
        def aldea = Aldea.list().get(0)
        params.direccion = aldea.nombre + ". " + aldea.direccion + "."
        params.aldea = aldea.nombre
        params.dia = dia
        params.mes = mes
        params.anio = anio
        params._format="PDF"
        params._name="constanciaBecado"
        params._file="constanciaBecado"
        params.imgSucre = servletContext.getRealPath("/images/sucre.png")
        params.ubv = servletContext.getRealPath("/images/ubv.png")
        def alumno = Alumno.findByCedula(params.cedula)
        params.especialidad = alumno.especialidad.nombre
        //-----------------busco lapso academico para obtener
        // las materias que cursa y luego la division-------------------
        
        def lapso = sucre.LapsoAcademico.createCriteria()
        def results = lapso.list (max: 1, offset: 0) {
            order("id", "desc")
        }
        
        def inscripcion = sucre.Inscripcion.createCriteria()
        def lapsoA =""
        if (!results.isEmpty()){
            lapsoA = results.get(0).nombre
        }
        def inscripciones = inscripcion.list (max: 1, offset: 0) {
            eq("lapsoAcademico",lapsoA)
            eq("alumno", alumno)
            order("id", "desc")
        }
        if (inscripciones.size()==0){
            params._format="PDF"
            params._name="noInscrito"
            params._file="noInscrito"
            params.mensaje = "El Triunfador " + alumno.nombres + " "
            params.mensaje += alumno.apellidos + " con cédula de identidad N° "
            params.mensaje += alumno.cedula + " no ha realizado inscripción en el lapso académico en curso "
            params.mensaje += lapsoA + ", en la " + aldea.nombre + ".";
            chain(controller:'jasper',action:'index',params:params)
        } else {
            params.division = inscripciones.get(0).division.nombre.replace("-", " en ") 
        }
        //-------------Busco datos de Coordinador-----------------------
        def coordinador = Coordinador.findByEstado(true)
        params.coordinador = coordinador.nombres + " " + coordinador.apellidos
        data.add(alumno)
        
        chain(controller:'jasper',action:'index',model:[data:data],params:params)
    }
    def reporteTrabajo = {
        def solicitante = null
        params.cargo = "Docente Asesor"
        solicitante = Docente.findByCedula(params.cedula)
        if (solicitante != null) {
            //------------Busco lapso academico-------------------------
            params.periodo = " desde el período académico " + solicitante.lapsoAcademico
        }
        //-----------verifico si es un operario-------------------------
        if(solicitante == null) {
            solicitante = Operario.findByCedula(params.cedula)
            params.cargo = "Operario"
            if (solicitante != null) {
                //------------Busco fecha ingreso---------------------------
                params.periodo = " desde la fecha " + solicitante.fechaDeIngresoMS
            }
        }
        
        //hay que definir que lleva el documento para poder terminar este reporte
        def data = new ArrayList();                
        SimpleDateFormat formatoDia = new SimpleDateFormat("dd")
        SimpleDateFormat formatoMes = new SimpleDateFormat("MM")
        SimpleDateFormat formatoAnio = new SimpleDateFormat("yyyy")
        
        String stringDia  = formatoDia.format(new Date())
        String stringMes  = formatoMes.format(new Date())
        String stringAnio = formatoAnio.format(new Date())
        
        String dia  = message(code:'reporte.dia.' + stringDia) + " ("+stringDia+")"
        String mes  = message(code:'reporte.mes.' + stringMes)
        String anio =  message(code:'reporte.anio.' + stringAnio) + "("+stringAnio+")"
        def aldea = Aldea.list().get(0)
        params.direccion = aldea.nombre + ". " + aldea.direccion + "."
        params.aldea = aldea.nombre
        params.dia = dia
        params.mes = mes
        params.anio = anio
        params._format="PDF"
        params._name="constanciaDeTrabajo"
        params._file="constanciaTrabajo"
        params.imgSucre = servletContext.getRealPath("/images/sucre.png")
        params.ubv = servletContext.getRealPath("/images/ubv.png")
        //-------------Busco datos de Coordinador-----------------------
        def coordinador = Coordinador.findByEstado(true)
        params.coordinador = coordinador.nombres + " " + coordinador.apellidos
        data.add(solicitante)
        
        chain(controller:'jasper',action:'index',model:[data:data],params:params)
    }
    
    
    def consultarAlumno = {String accion ->
        params.max = parametersService.getInt("paginacion.maxRegPagina")
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        
        def query={
            
            if(params.searchField){
                ilike('nombres','%'+params.searchField+'%')
            }
            if (accion.equals("noBecado")){
                eq('becado', false)
            }
        }
        def alumnoList = Alumno.createCriteria().list(params,query)
        if (alumnoList.size() <= 0 ) {
            query={
                if(params.searchField){
                    ilike('cedula','%'+params.searchField+'%')
                }
                if (accion.equals("noBecado")){
                    eq('becado', false)
                }   
                
            }
            alumnoList = Alumno.createCriteria().list(params,query)
        }
        if (alumnoList.size() <= 0 ) {
            query={
                if(params.searchField){
                    ilike('apellidos','%'+params.searchField+'%')
                }
                if (accion.equals("noBecado")){
                    eq('becado', false)
                }   
            }
            alumnoList = Alumno.createCriteria().list(params,query)
        }
        
        
        [ alumnoInstanceList:  alumnoList,
            alumnoInstanceTotal: alumnoList.getTotalCount()]       
    }
    
    
}
